package com.github.wxhnyfy.service;

import com.github.wxhnyfy.ExcelData;
import com.github.wxhnyfy.NoHeaderSheetData;
import com.github.wxhnyfy.SheetData;

import java.io.File;
import java.util.List;

/**
 * Excel 工具接口
 *
 * @author chenwc
 */
public interface ExcelToolService {

    /**
     * 读取Excel文件第 1 个Sheet
     *
     * @param excelFile Excel文件
     * @return sheet数据
     */
    SheetData read(File excelFile);

    /**
     * 读取整个Excel文件
     *
     * @param excelFile Excel文件
     * @return Excel数据
     */
    ExcelData readExcelFile(File excelFile);

    /**
     * 指定Sheet名称读取Excel文件
     *
     * @param excelFile Excel文件
     * @param sheetName Sheet名称
     * @return sheet数据
     */
    SheetData read(File excelFile, String sheetName);

    /**
     * 读取Excel文件第 index 个Sheet
     *
     * @param excelFile  Excel文件
     * @param sheetIndex Sheet下标
     * @return sheet数据
     */
    SheetData read(File excelFile, int sheetIndex);

    /**
     * 读取excel文件，没有表头的sheet
     *
     * @param excelFile  excel文件
     * @param sheetIndex 要读取的sheet页签下标
     * @return excel文件数据
     */
    SheetData readByNoHeaderSheet(File excelFile, int sheetIndex);

    /**
     * 读取excel文件，没有表头的sheet
     *
     * @param excelFile  excel文件
     * @param sheetIndex 要读取的sheet页签下标
     * @return excel文件数据
     */
    NoHeaderSheetData readByNoHeaderSheetData(File excelFile, int sheetIndex);

    /**
     * 自定义读取excel文件的sheet
     *
     * @param excelFile   excel文件
     * @param sheetIndex  要读取的sheet页签下标（从0开始）
     * @param startRow    开始读取的行号（从0开始）
     * @param endRow      结束读取的行号（从0开始）
     * @param startColumn 开始读取的列数（从0开始）
     * @param endColumn   结束读取的总列数（从0开始）
     * @return excel文件数据
     */
    SheetData read(File excelFile, int sheetIndex, int startRow, int endRow, int startColumn, int endColumn);

    /**
     * 写入Excel文件
     *
     * @param excelFile Excel文件
     * @param sheetData Sheet数据
     */
    void write(File excelFile, SheetData sheetData);

    /**
     * 写入Excel文件
     *
     * @param excelFile Excel文件
     * @param sheetData Sheet数据
     */
    void writeNoHeaderSheet(File excelFile, NoHeaderSheetData sheetData);

    /**
     * 同一个Excel文件写入多个Sheet
     * 每个工作表由不同的线程生成
     *
     * @param excelFile     Excel文件
     * @param sheetDataList Sheet数据
     */
    void writeMultipleSheet(File excelFile, List<SheetData> sheetDataList);
}
